package com.smart.system.service;

import java.util.Date;
import java.util.List;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.smart.system.domain.AreaLocation;
import com.smart.system.domain.Employee;
import com.baomidou.mybatisplus.extension.service.IService;
import com.smart.system.domain.vo.*;

/**
 * 员工Service接口
 * 
 * @author smart
 * @date 2024-09-11
 */
public interface IEmployeeService extends IService<Employee>
{
    /**
     * 查询员工
     * 
     * @param id 员工主键
     * @return 员工
     */
    public Employee selectEmployeeById(String id);

    /**
     * 查询员工列表
     * 
     * @param employee 员工
     * @return 员工集合
     */
    public List<Employee> selectEmployeeList(Employee employee);

    /**
     * 新增员工
     * 
     * @param employee 员工
     * @return 结果
     */
    public int insertEmployee(Employee employee);

    /**
     * 修改员工
     * 
     * @param employee 员工
     * @return 结果
     */
    public int updateEmployee(Employee employee);

    /**
     * 批量删除员工
     * 
     * @param ids 需要删除的员工主键集合
     * @return 结果
     */
    public int deleteEmployeeByIds(String[] ids);

    /**
     * 删除员工信息
     * 
     * @param id 员工主键
     * @return 结果
     */
    public int deleteEmployeeById(String id);

    /**
     * 解冻/冻结员工
     * @param id
     * @return
     */
    boolean frostEmployee(String id);

    /**
     * 根据手环编号获取用户s
     * @param imei
     * @return
     */
    Employee getByImei(String imei);

    /**
     * 查询轨迹
     * @param content
     * @param startTime
     * @param endTime
     * @return
     */



    // todo -

    /**
     * 查询人员轨迹
     * @param content
     * @param startTime
     * @param endTime
     * @param page
     * @return
     */
    IPage<EmployeeTrajectoryVo> listEmployeeTrajectory(String content, String startTime, String endTime, Page page);

    /**
     * 获取员工列表信息
     * @return
     */
    List<NowEmployeeTrajectoryVo> listTrajectoryToEmployee(Date startTime, Date endTime,Integer id);

    /**
     * 获取员工大屏信息
     * @param areaId
     * @param toPage
     * @return
     */
    IPage<EmployeeScreenVo> listEmployeeScreen(Integer areaId, Page toPage);

    /**
     * 获取人员当前定位
     * @param id
     * @return
     */
    AreaLocation getLocation(Integer id);

    /**
     * 设置手环
     * @param employeeSetVo
     * @return
     */
    boolean setWatches(EmployeeSetVo employeeSetVo);

    /**
     * 分页查询
     * @param employee
     * @param page
     * @return
     */
    IPage<Employee> selectEmployeePage(Employee employee, IPage page);
}
